package main

import (
	"fmt"
	"gopkg.in/ini.v1"
	"log"
	"monitoring-api/cache"
	"monitoring-api/models"
	"monitoring-api/pkg/snowflake"
	"monitoring-api/server"
)

type Config struct {
	Mysql   `ini:"mysql"`
	MongoDB `ini:"mongoDb"`
	Redis   `ini:"redis"`
}

type Mysql struct {
	UserName string `ini:"user_name"`
	Password string `ini:"password"`
	Host     string `ini:"host"`
	DBName   string `ini:"db_name"`
}

type MongoDB struct {
	AuthSource string `ini:"auth_source"`
	UserName   string `ini:"username"`
	Password   string `ini:"password"`
}

type Redis struct {
	Addr     string `ini:"addr"`
	Password string `ini:"password"`
}

func init() {
	//读取配置文件
	var configObj = new(Config) //得到结构体指针
	load, err := ini.Load("./config/config.ini")
	if err != nil {
		log.Fatal(err)
	}
	err = load.MapTo(configObj)
	if err != nil {
		log.Fatal(err)
	}
	connStr := fmt.Sprintf(`%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local`, configObj.Mysql.UserName, configObj.Mysql.Password, configObj.Mysql.Host, configObj.Mysql.DBName)
	// 连接Mysql数据库
	models.Database(connStr)
	models.InitMongoDb(configObj.MongoDB.AuthSource, configObj.MongoDB.UserName, configObj.MongoDB.Password)
	cache.Redis(configObj.Redis.Addr, configObj.Redis.Password)
	// 初始化雪花算法
	snowflake.Init(1)
}

func main() {
	// 装载路由
	r := server.NewRouter()
	r.Run(":6789")
}
